#define _CRT_SECURE_NO_WARNINGS 1




		《 Linux_25_软硬链接 》




[a@192 1]$ echo "hello world" > file_target1.txt	//输出重定向到文件
[a@192 1]$ cat file_target1.txt						//查看文件内容
hello world
[a@192 1]$ ll - i									//查看 inode编号	
total 4
【3312126】 - rw - rw - r--. 1 a a 12 May  6 07 : 58 file_target1.txt
[a@192 1]$ pwd										//查看当前文件所在路径
 home / a / Desktop / a / bb / 1
[a@192 1]$ df - h									//查看磁盘的挂载情况和容量
Filesystem      Size  Used Avail Use % Mounted on
devtmpfs        471M     0  471M   0 % / dev
tmpfs           487M     0  487M   0 % / dev / shm
tmpfs           487M  8.5M  478M   2 % / run
tmpfs           487M     0  487M   0 % / sys / fs / cgroup
 dev / sda3        14G  5.8G  7.5G  44 % /
dev / sda1       297M  152M  145M  52 % / boot
tmpfs            98M   36K   98M   1 % / run / user / 1000
[a@192 1]$ ll - i
total 4
3312126 - rw - rw - r--. 1 a a 12 May  6 07:58 file_target1.txt
	

//————————————————————————————————————————————————————————————————————————————


			《 软连接 》

[a@192 1]$ ln - s file_target1.txt file_soft.link	//link(链接), soft(柔软的).创建软链接 file_soft.link 后者链接前者 .txt
[a@192 1]$ ll -i
【3312130】 lrwxrwxrwx. 1 a a 16 May  6 08 : 00 【file_soft.link】 -> 【file_target1.txt】 //软连接也有自己独立的 inode,也是一个独立的文件
【3312126】 - rw - rw - r--. 1 a a 12 May  6 07 : 58 【file_target1.txt】
[a@192 1]$

[a@192 1]$ touch file_target2.txt					//创建新文件 
[a@192 1]$ ls
file_soft.link  file_target1.txt  file_target2.txt
[a@192 1]$ echo "hello bit" > file_target2.txt		//输出重定向到文件 file_target2.txt
[a@192 1]$ ll
total 8
lrwxrwxrwx. 1 a a 16 May  6 08:00 file_soft.link->file_target1.txt
- rw - rw - r--. 1 a a 12 May  6 07 : 58 file_target1.txt
- rw - rw - r--. 1 a a 10 May  6 08 : 14 file_target2.txt
[a@192 1]$ cat file_target2.txt						//查看文件内容
hello bit
[a@192 1]$ ll - i									//查看 inode编号	
total 8
【3312130】 lrwxrwxrwx. 1 a a 16 May  6 08 : 00 file_soft.link->file_target1.txt
【3312126】 - rw - rw - r--. 1 a a 12 May  6 07 : 58 file_target1.txt
【3312137】 - rw - rw - r--. 【1】 a a 10 May  6 08 : 14 file_target2.txt

[a@192 1]$  cat file_soft.link						//软连接的内容是：目标文件所对应的路径字符串。(类似于Windows当中的快捷方式)
hello world											//软连接类似于Windows桌面的快捷方式，当删除快捷方式时，并不影响该软件的使用情况。
[a@192 1]$ rm file_target1.txt						//如果目标文件删除了，软连接就无效了(快捷方式失效了)
[a@192 1]$ ll
lrwxrwxrwx. 1 a a 16 May  6 08 : 00 【file_soft.link】 -> 【file_target1.txt】	//出现【红色警告】与【闪烁】
[a@192 1]$ cat file_soft.link
cat : file_soft.link : No such file or directory	//没有这样的文件或目录
[a@192 1]$


[a@192 1]$ cd test /								//目录 test 中创建目录 bin，conf
[a@192 test]$ mkdir bin
[a@192 test]$ mkdir conf
[a@192 test]$ ll
total 0
drwxrwxr - x. 2 a a 6 May  6 08:40 bin
drwxrwxr - x. 2 a a 6 May  6 08 : 41 conf
[a@192 test]$ cd bin								//进入 bin 目录，然后连续创建目录
[a@192 bin]$ mkdir - p a / b / c						//bin 目录中创建 a目录， a目录中创建 b目录， b目录中创建 c目录 。
[a@192 bin]$ cd .. / ..
[a@192 1]$ tree test								//以树状展示 test 目录下的 子目录 。
test
├── bin
│   └── a
│       └── b
│           └── c
└── conf
5 directories, 0 files

//或者在test 目录下时
[a@192 test]$ tree .								//以树状展示 test 目录下的 子目录 。
.
├── bin
│   └── a
│       └── b
│           └── c
└── conf


//————————————————————————————————————————————————————————————————————————————


				《 创建软连接 》

[a@192 test]$ cp / usr / bin / ls myls				//复制一段 ls 命令程序, 到当前目录 改名叫 myls
[a@192 test]$ ll
total 116
drwxrwxr - x. 3 a a     15 May  6 08 : 41 bin
drwxrwxr - x. 2 a a      6 May  6 08 : 41 conf
- rwxr - xr - x. 1 a a 117608 May  6 08 : 51 myls
[a@192 test]$ mv myls bin / a / b / c				//移动 myls 到文件深处
[a@192 test]$ mkdir log								//test 文件中存在着许许多多文件
[a@192 test]$ ll
total 0
drwxrwxr - x. 3 a a 15 May  6 08 : 41 bin
drwxrwxr - x. 2 a a  6 May  6 08 : 41 conf
drwxrwxr - x. 2 a a  6 May  6 08 : 52 log
[a@192 test]$ . / bin / a / b / c / myls			//我们要想 运行 myls 每次带绝对路径会非常麻烦。
bin  conf  log
[a@192 test]$ . / bin / a / b / c / myls - l
total 0
drwxrwxr - x. 3 a a 15 May  6 08 : 41 bin
drwxrwxr - x. 2 a a  6 May  6 08 : 41 conf
drwxrwxr - x. 2 a a  6 May  6 08 : 52 log
[a@192 test]$ ln - s bin / a / b / c / myls run.link	//于是我们可以 创建软连接 run.link
[a@192 test]$ ll
total 0
drwxrwxr - x. 3 a a 15 May  6 08 : 41 bin
drwxrwxr - x. 2 a a  6 May  6 08 : 41 conf
drwxrwxr - x. 2 a a  6 May  6 08 : 52 log
lrwxrwxrwx. 1 a a 14 May  6 08 : 55 run.link->bin / a / b / c / myls	//成功创建出 软连接
[a@192 test]$ . / run.link												//直接运行 软连接 也可以执行 myls 程序命令。
bin  conf  log	run.link
[a@192 test]$ . / run.link - l
total 0
drwxrwxr - x. 3 a a 15 May  6 08 : 41 bin
drwxrwxr - x. 2 a a  6 May  6 08 : 41 conf
drwxrwxr - x. 2 a a  6 May  6 08 : 52 log
lrwxrwxrwx. 1 a a 14 May  6 08 : 55 run.link->bin / a / b / c / myls
[a@192 test]$


[a@192 test]$ cd conf /
[a@192 conf]$ mkdir - p e/f/g							//conf 文件中创建 e文件, e文件中创建 f文件, f文件中创建 g文件.
[a@192 conf]$ cd ..
[a@192 test]$ tree .
.
├── bin
│   └── a
│       └── b
│           └── c
│               └── myls
├── conf
│   └── e
│       └── f
│           └── g
├── log
└── run.link->bin / a / b / c / myls

//或者只展示 conf /
[a@192 test]$ tree conf /
├── conf /
│   └── e
│       └── f
│           └── g

[a@192 test]$ ll
total 0
drwxrwxr - x. 3 a a 15 May  6 08:41   bin
drwxrwxr - x. 3 a a 15 May  6 09 : 02 conf
drwxrwxr - x. 2 a a  6 May  6 08 : 52 log
lrwxrwxrwx. 1 a a 18 May  6 09 : 11 my.conf->conf / e / f / g / my.conf
lrwxrwxrwx. 1 a a 14 May  6 08 : 55 run.link->bin / a / b / c / myls
[a@192 test]$ touch conf / e / f / g / my.conf				//在文件深处创建一个文件 my.conf
[a@192 test]$ vim conf / e / f / g / my.conf				//如果每次要在深处打开这个文件，进行编辑内容会非常麻烦。
[a@192 test]$ ln - s conf / e / f / g / my.conf conf.link	//创建软连接。			 此时 软连接的作用就体现出来了。
[a@192 test]$ ll
total 0
drwxrwxr - x. 3 a a 15 May  6 08:41 bin
drwxrwxr - x. 3 a a 15 May  6 09 : 02 conf
lrwxrwxrwx. 1 a a 18 May  6 09 : 14 conf.link->conf / e / f / g / my.conf		//成功创建软连接 
drwxrwxr - x. 2 a a  6 May  6 08 : 52 log
lrwxrwxrwx. 1 a a 18 May  6 09 : 11 my.conf->conf / e / f / g / my.conf
lrwxrwxrwx. 1 a a 14 May  6 08 : 55 run.link->bin / a / b / c / myls
[a@192 test]$ vim conf.link									//直接以软连接的形式 进行文件的编辑 (非常方便)
//编辑内容：
//test.exe : XXXXX
//log.txt : YYYYY

//比如：当我们使用各种 库 的时候，(路径非常多、繁琐)通过软连接的形式来使用就会方便许多


//————————————————————————————————————————————————————————————————————————————


			《 硬连接 》

[a@192 1]$ ln file_target2.txt file_hard.link
[a@192 1]$ ll - i
total 12
【3312137】 - rw - rw - r--. 【2】 a a 10 May  6 08 : 14 【file_hard.link】	//硬链接不是一个独立的文件，没有独自的 inode,共用目标文件的 inode number
  3312130   lrwxrwxrwx. 1 a a 16 May  6 08 : 00 file_soft.link->file_target1.txt
  3312126   - rw - rw - r--. 1 a a 12 May  6 07 : 58 file_target1.txt
【3312137】 - rw - rw - r--. 【2】 a a 10 May  6 08 : 14 【file_target2.txt】// 【2】 表示有两个映射关系
[a@192 1]$

硬链接就是一个文件名 和 inode 的映射关系，
建立硬链接，就是在指定目录下，添加一个新的文件名 和 inode number 的映射关系。
映射关系也由【1】 变成 【2】
文件的磁盘级引用计数：有多少个文件名字符串 通过 inode number 指向这个 文件(inode)。

删除 原本的文件名 ，剩下的那一个就相当于给 原文件重命名了。 
映射关系也由【2】 变成 【1】
只有当 计数为【0】 才会真正的删除这个文件。

//————————————————————————————————————————————————————————————————————————————

定位一个文件的方式只有两种
①、通过路径							//	<==> 软连接
②、直接找到目标文件的 inode			//	<==> 硬链接
两种方式最终 都要通过 inode number 的。

//————————————————————————————————————————————————————————————————————————————

任何一个目录，刚开始新建的时候，引用计数一定是2
【① .】 和 【②它本身】
目录 A 内部新建一个目录，会让 A目录 的引用计数自动 +1 ，
一个目录内有几个目录：A 引用计数 -2 

比如目录 A 中创建一个子目录后：
子目录的【① ..】和 【②它本身】 以及本身所在目录的 【③ .】一共存在3个 引用计数

硬链接用途:
1.构建 Linux 的路径结构，让我们可以使用.和 .. 来进行路径定位。
Linux 系统中，不允许给目录建立硬链接，避免形成【 路径环绕 】。
[a@192 1]$ ln dir dir.hard						// 给目录建立硬链接时
 ln: 'dir': hard link not allowed for directory	//Linux中：不允许给目录建立硬链接

2.硬链接一般是用来做文件备份的。


//————————————————————————————————————————————————————————————————————————————

1.打开的文件--->内核，内存
2.没打开的文件--->磁盘，文件系统相关。

文本写入，二进制写入，是语言层的概念，由C语言进行 类型的相互转换。
例如：
//int a = 123456;
//printf("%d", a);
我们看到的实际是在显示器打印 '1''2''3''4''5''6'字符。
所以有了 ASCLL 码表。	就是给C语言的某些函数做字符转化的。


————————————————————————————————————————————————————————————————————————————


————————————————————————————————————————————————————————————————————————————


		《 动态库和静态库 》

1.我们有没有用过库呢 ? 用过C、C++的标准库
STL, list, vector, stack, queue, map, set ...
strerror, strstr, strcpy, memset...  这些函数必须得有具体的实现

[whb@bite - alicloud lesson231$ ldd a.out
linux - vdso.so.1 = > (0x80007ffd9fdad088)
libc.so.6 = > / lib64 / libc.so.6(0x00007f9a90a67000)  //【 C 标准库 】
 lib64 / 1d - 1inux - x86 - 64.so.2(0x00007f9a90e35000)

//软连接，链接的 C标准库
[whb@bite - alicloud lesson23]$ ls / lib64 / libc.so.6 - l
Irwxrwxrwx 1 root root 12 Oct 22 2022 /lib64/libc.so.6 -> libc - 2.17.so	//软连接，链接的 C标准库

[whb@bite - alicloud lesson23]$ ls / lib64 / libc - 2.17.so - l
- rwxr - xr - x1 root root 2156592 May 19 2022 / 1ib64 / libc - 2.17.so		//【 C 标准库 】


2. 
Linux 中:
	.so (动态库)
	.a  (静态库)
windows 中:
	.dll(动态库)
	.lib(静态库)


————————————————————————————————————————————————————————————————————————————

原文件        目标文件                     可执行文件
x.c      -->  x.o       ｝
y.c      -->  y.o       ｝
z.c      -->  z.o       ｝ 链接形成可执行，main.exe
main.c   -->  main.o    ｝

 .o 目标文件（可重定位目标文件）

————————————————————————————————————————————————————————————————————————————


		< 生成同名.o >  

-rw - rw - r--. 1 a a  109 May  8 09:22 mymath.c
- rw - rw - r--. 1 a a 1535 May  8 09 : 15 mystdio.c
//	< gcc -c 生成同名 .o   目标文件 >
[a@192 stdio]$ gcc -c mymath.c mystdio.c			

- rw - rw - r--. 1 a a  109 May  8 09 : 22 mymath.c
- rw - rw - r--. 1 a a 1344 May  8 09 : 37 mymath.o
- rw - rw - r--. 1 a a 1535 May  8 09 : 15 mystdio.c
- rw - rw - r--. 1 a a 2792 May  8 09 : 37 mystdio.o


 把所有 .o  目标文件 拷贝给 舍友（roommate）
drwxrwxr - x. 2 a a   6 May  8 09:40 roommate
drwxrwxr - x. 2 a a 105 May  8 09 : 37 stdio
[a@192 dir]$ cd roommate /
[a@192 roommate]$ ll
total 0
[a@192 roommate]$ cp .. / stdio/*.o .		//拷贝上级目录下 stdio 中的所有 .o 文件给舍友
[a@192 roommate]$ ll
total 8
-rw-rw-r--. 1 a a 1344 May  8 09:41 mymath.o
-rw-rw-r--. 1 a a 2792 May  8 09:41 mystdio.o

 把所有 .h  头文件 拷贝给 舍友（roommate）,但是 .c 实现不能拷贝给舍友
[a@192 roommate]$ cp .. / stdio/* .h .
- rw - rw - r--. 1 a a   56 May  8 10 : 13 mymath.h
- rw - rw - r--. 1 a a 1344 May  8 10 : 13 mymath.o
- rw - rw - r--. 1 a a  857 May  8 10 : 13 mystdio.h
- rw - rw - r--. 1 a a 2792 May  8 10 : 13 mystdio.o

根据头文件和.o 文件， 我们可以使用 实现的内容
-rw - rw - r--. 1 a a  511 May  8 10:22 main.c

————————————————————————————————————————————————————————————————————————————

//		《 main.c 》
 
#include "mystdio.h"
#include "mymath.h"
#include <stdio.h>
#include <string.h>

int main()
{
    int a = 10;
    int b = 20;

    //int myAdd(int, int);
    printf("%d+%d=%d\n", a, b, myAdd(a, b));

    //myFILE* my_fopen(const char *psth, const char *flag);
    myFILE* fp = my_fopen("./myfile.txt", "w");
    if (fp == NULL) return 1;

    const char* message = "这是我写的：hello world!\n";
    //ssize_t my_fwrite(myFILE *fp, const char *data, int len);
    my_fwrite(fp, message, strlen(message));

    my_fclose(fp);

    return 0;
}
//————————————————————————————————————————————————————————————————————————————

[a@192 roommate]$ gcc - c main.c                            // 把main.c 编译成 .o文件
[a@192 roommate]$ ll
total 24
- rw - rw - r--. 1 a a  511 May  8 10 : 22 main.c
- rw - rw - r--. 1 a a 2040 May  8 10 : 26 main.o
- rw - rw - r--. 1 a a   56 May  8 10 : 13 mymath.h
- rw - rw - r--. 1 a a 1344 May  8 10 : 13 mymath.o
- rw - rw - r--. 1 a a  857 May  8 10 : 13 mystdio.h
- rw - rw - r--. 1 a a 2792 May  8 10 : 13 mystdio.o
[a@192 roommate]$ gcc main.o mymath.o mystdio.o -o myexe   // 再把3个 .o 文件融合成一个 myexe 的.o文件
[a@192 roommate]$ ll
total 36
- rw - rw - r--. 1 a a  511 May  8 10 : 22 main.c
- rw - rw - r--. 1 a a 2040 May  8 10 : 26 main.o
- rwxrwxr - x. 1 a a 9072 May  8 10 : 26 myexe
- rw - rw - r--. 1 a a   56 May  8 10 : 13 mymath.h
- rw - rw - r--. 1 a a 1344 May  8 10 : 13 mymath.o
- rw - rw - r--. 1 a a  857 May  8 10 : 13 mystdio.h
- rw - rw - r--. 1 a a 2792 May  8 10 : 13 mystdio.o
[a@192 roommate]$ . / myexe                                 // 执行可执行程序 myexe 得到求值结果，并且生成文件myfile.txt 
10 + 20 = 30                                                // 得到 Add（10 + 20）的结果
[a@192 roommate]$ ll
total 40
- rw - rw - r--. 1 a a  511 May  8 10 : 22 main.c
- rw - rw - r--. 1 a a 2040 May  8 10 : 26 main.o
- rwxrwxr - x. 1 a a 9072 May  8 10 : 26 myexe
- rw - rw - r--. 1 a a   31 May  8 10 : 27 myfile.txt       // 并且生成文件myfile.txt 
- rw - rw - r--. 1 a a   56 May  8 10 : 13 mymath.h
- rw - rw - r--. 1 a a 1344 May  8 10 : 13 mymath.o
- rw - rw - r--. 1 a a  857 May  8 10 : 13 mystdio.h
- rw - rw - r--. 1 a a 2792 May  8 10 : 13 mystdio.o
[a@192 roommate]$ cat myfile.txt                            // 查看文件内容：这是我写的：hello world!
这是我写的：hello world!
[a@192 roommate]$


//————————————————————————————————————————————————————————————————————————————


//————————————————————————————————————————————————————————————————————————————


//      《 把 .o 打包》

但是 .o 文件过多时，万一不小心误删了1个 就跑不起来了

- rw - rw - r--. 1 a a 1344 May  8 10:13 mymath.o
// ... ...
- rw - rw - r--. 1 a a 2792 May  8 10 : 13 mystdio.o

// 融合所有 .o 目标文件
[a@192 roommate2]$ ar - rc libmyc.a * .o                //把所有 .o 打包命名为：libmyc.a
- rw - rw - r--. 1 a a 4404 May  8 11 : 24 libmyc.a

// 把目标文件 libmyc.a 和头文件交给你的舍友 
- rw - rw - r--. 1 a a 4404 May  8 11 : 24 libmyc.a
- rw - rw - r--. 1 a a  511 May  8 10 : 22 main.c       //舍友自己实现 main.c
- rw - rw - r--. 1 a a   56 May  8 10 : 13 mymath.h
- rw - rw - r--. 1 a a  857 May  8 10 : 13 mystdio.h

[a@192 roommate2]$ gcc main.c libmyc.a                  //联合自己的 main.c 和 融合的.o 文件 编译
[a@192 roommate2]$ ll
total 32
- rwxrwxr - x. 1 a a 9072 May  8 11 : 29 a.out          //生成默认可执行程序 a.out
- rw - rw - r--. 1 a a 4404 May  8 11 : 24 libmyc.a
- rw - rw - r--. 1 a a  511 May  8 10 : 22 main.c
- rw - rw - r--. 1 a a   56 May  8 10 : 13 mymath.h
- rw - rw - r--. 1 a a  857 May  8 10 : 13 mystdio.h
[a@192 roommate2]$ . / a.out                            //执行程序
10 + 20 = 30
[a@192 roommate2]$ ll
total 36
- rwxrwxr - x. 1 a a 9072 May  8 11 : 29 a.out
- rw - rw - r--. 1 a a 4404 May  8 11 : 24 libmyc.a
- rw - rw - r--. 1 a a  511 May  8 10 : 22 main.c
- rw - rw - r--. 1 a a   31 May  8 11 : 29 myfile.txt   //生成文件
- rw - rw - r--. 1 a a   56 May  8 10 : 13 mymath.h
- rw - rw - r--. 1 a a  857 May  8 10 : 13 mystdio.h
[a@192 roommate2]$ cat myfile.txt                       //显示文件内容
这是我写的：hello world!
[a@192 roommate2]$


所谓的 库文件，本质就是把 .o 打包

————————————————————————————————————————————————————————————————————————————


————————————————————————————————————————————————————————————————————————————


//头文件 是一个手册 ，提供函数的声明，告诉用户怎么用,
// .o 提供实现，我们只需要补上一个mian，调用头文件提供的方法，
//然后和 .o 进行连接，就能形成 可执行



		《 静态库 --> 库 》


mylib 中创建的两个目录 include， lib	
[a@192 roommate2]$ tree mylib
mylib
├── include				//拷贝我们自己写的头文件
└── lib					//拷贝我们自己写的 .o 包

			《 拷贝 》
[a@192 mylib]$ cp ../*.h include/
[a@192 mylib]$ cp ../*.a lib/

[a@192 roommate2]$ tree mylib /
mylib /
├── include
│   ├── mymath.h
│   └── mystdio.h
└── lib
└── libmyc.a


把生成的静态库 安装到系统中
[a@192 roommate2]$ sudo cp mylib / include/*.h   /usr/include/		// .h  把我们自己写的库 安装到系统中 
[a@192 roommate2]$ sudo cp mylib / lib/*.a       /lib64				// .o  包



-rw - rw - r--1 whb whb 374 Apr 14 11:43 main.c
drwxrwxr - x4 whb whb 4096 Apr 14 11 : 52 mylib	//拷贝过去后，这个就相当于安装包，就可以不要了
[whb@bite - alicloud roommate]$ rm mylib / -rf	//删除安装包，不影响使用。


//[a@192 roommate2]$ ar -rc libmyc.a *.o		// myc 这个是自己的 库名

C / C++的库，gcc / g++默认是认识c / C++库
libmyc.a-- > 别人写的(第三方提供)->gcc / g++ 不认识->使用： -l
//[a@192 roommate2]$ gcc main.c -l myc			//就可以了

- rwxrwxr - x1 whb whb 17096 Apr 14 11:58 a.out
- rw - rw - r--1 whb whb 374 Apr 14 11 : 56 main.c
[whb@bite - alicloud roommate]$ . / a.out
10 + 20 = 30
[a@192 roommate2]$ cat myfile.txt                       //显示文件内容
这是我写的：hello world!


这样可以吧我们写的 .o 安装到系统中，但是极不推荐：
[a@192 roommate2]$ sudo rm / usr / include / mystdio.h	//卸载我们自己写的非官方代码
[a@192 roommate2]$ sudo rm / usr / include / mymath.h		//2个头文件，一个 .o 包
[a@192 roommate2]$ sudo rm /lib64/ libmyc.a 


————————————————————————————————————————————————————————————————————————————

	I 表include ,也要在我的路径下找一下头文件
 gcc 也是进程，有自己的路径 + ./mylib/include/ 就找到了我的头文件
[a@192 roommate2]$ gcc main.c -I ./mylib/include/
 链接报错！

 L 也要把我们写的 库 .o 链接上去，                -L + 路径
[a@192 roommate2]$ gcc main.c -I ./mylib/include/ -L ./mylib/lib
报错！
（该目录可能存在很多库,具体要找谁呢？）
(注意：libmyc.a库名要去掉 前缀lib，后缀.a ==> myc ) 
 -l (link：执行确定的第三方库 名称)
[a@192 roommate2]$ gcc main.c -I ./mylib/include/ -L ./mylib/lib -l myc		


————————————————————————————————————————————————————————————————————————————


			《 头文件的 < > 和 " " 》

 头文件不包含在库中时,去掉 I 
[a@192 roommate2]$ gcc main.c -L ./mylib/lib -l myc	
	
#include <mylib/include/mymath.h>		// < > 会在系统的目录下去找
 找不到！

在当前目录下 找到
#include "mylib/include/mystdio.h"	// " " 会优先在当前目录下找。
#include "mylib/include/mymath.h"
 

————————————————————————————————————————————————————————————————————————————


————————————————————————————————————————————————————————————————————————————

